#ifndef BITOPS_H
#define BITOPS_H

//对应bit位置1
#define setbit(reg, bit) ((reg)|=(1UL<<(bit)))
//对应bit位清0
#define clrbit(reg, bit) ((reg)&=~(1UL<<(bit)))
//对应bit位取反
#define togbit(reg, bit) ((reg)^=(1UL<<(bit)))
//检查对应bit位状态
#define chkbit(reg, bit) (((reg)&(1UL<<(bit)))>>(bit))
//构造N位掩码
#define bitmask(len) ((1UL << (len)) - 1)
//将连续多个bit位设置为指定值（起始位置和长度）
#define setnbits(reg, begin, len, value) ((reg) = ((reg) & ~(bitmask(len) << (begin))) | (((value) & bitmask(len)) << (begin)))
//将连续多个bit位设置为指定值（起始和结束位置）
#define setbits(reg, begin, end, value) setnbits(reg, begin, end - begin + 1, value)

#endif
